﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using Clases.Dominio;
using Clases.Persistencia.NHibernate;

namespace Clases.Pruebas
{
    [TestFixture]
    public class TestAlumnoDAO
    {
        //Instancia el objeto DAO a probar
        private AlumnoDAO alumnoDAO = new AlumnoDAO();

        [Test]
        public void TestCrear()
        {
            // 1. Instancia el objeto a probar
            Alumno nuevoAlumno = new Alumno();

            // 2. Instanciando el objeto TO
            nuevoAlumno.Codigo = "u201112345";
            nuevoAlumno.Nombres = "Elía";
            nuevoAlumno.Apellidos = "Torres";
            nuevoAlumno.Edad = 31;
            nuevoAlumno.Correo = "peru@upc.edu.pe";

            // 3. Llamada al método del DAO a probar
            Alumno alumnoCreado = alumnoDAO.Crear(nuevoAlumno);

            // 4. Implementar las validaciones
            Assert.NotNull(alumnoCreado);
            Assert.AreEqual(nuevoAlumno.Nombres, alumnoCreado.Nombres);
        }

        [Test]
        public void TestObtener()
        {
            // 1. Instancia el objeto a probar
            Alumno pruebaAlumno = new Alumno();

            // 2. Instanciamos el objeto TO
            pruebaAlumno.Codigo = "u201112345";
            
            // 3. Llamada al método del DAO a probar
            Alumno alumnoObtenido = alumnoDAO.Obtener(pruebaAlumno.Codigo);

            // 4. Implementar las validaciones
            Assert.NotNull(alumnoObtenido);
            Assert.AreEqual(pruebaAlumno.Codigo, alumnoObtenido.Codigo);
            Assert.NotNull(alumnoObtenido.Nombres);
        }

        [Test]
        public void TestModificar()
        {
            // 1. Instancia el objeto a probar
            Alumno pruebaAlumno = new Alumno();

            // 2. Instanciamos el objeto TO
            pruebaAlumno.Codigo = "u201112345";
            pruebaAlumno.Nombres = "David";
            pruebaAlumno.Apellidos = "Enciso";
            pruebaAlumno.Edad = 27;
            pruebaAlumno.Correo = "bn@upc.edu.pe";

            // 3. Llamada al método del DAO a probar
            Alumno alumnoMod = alumnoDAO.Modificar(pruebaAlumno);

            // 4. Implementar las validaciones
            Assert.NotNull(alumnoMod);
            Assert.AreEqual(pruebaAlumno.Correo, alumnoMod.Correo);
        }

        [Test]
        public void TestEliminar()
        {
            // 1. Instancia el objeto a probar
            Alumno alumnoEliminar = new Alumno();

            // 2. Instanciamos el objeto TO            
            alumnoEliminar.Codigo = "u201112345";

            // 3. Llamada al método del DAO a probar
            Assert.DoesNotThrow(delegate
            {
                alumnoDAO.Eliminar(alumnoEliminar);
            });

            // 4. Implementar las validaciones
            Assert.NotNull(alumnoEliminar);
            Assert.NotNull(alumnoEliminar.Codigo);
        }

        [Test]
        public void TestListarAlumnosPorDominioCorreo()
        {
            string correo = "upc.edu.pe";

            ICollection<Alumno> LAlumno = alumnoDAO.ListarAlumnosPorDominioCorreo(correo);
            Assert.NotNull(LAlumno);
            Assert.Greater(LAlumno.Count, 0);
        }
    }
}